/*
* 1、泛型F 为需要增加参数x 的函数类型，F 约束于函数类型，泛型T为x参数指定的类型，返回一个新函数类型，
* 2、x参数类型为 T，...args剩余参数类型使用Parameters工具类型拿到F泛型的数组类型参数类型，ReturnType工具类型拿到F函数类型的返回类型。
* */
type fn = (a: number, b: number) => number

type AppendArgument<F extends (...args: any) => any, T> = (x: T, ...args: Parameters<F>) => ReturnType<F>

type FinalFn = AppendArgument<fn, string>

const fn: FinalFn = (x: string, a: number, b: number): number => {
	return 1
}
